home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 032 (1987-11-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 032 (1987-11-15)(Ossowski, Stefan)(DE)(PD).adf / RAY 1.0 < prev    next >
Text File  |  1989-01-18  |  43KB  |  853 lines

  1. /**************************************************************************/
  2.  *                                                                        *
  3.  *       DIESES FILE IST NICHT TEIL DES ORIGINAL DBW_RENDER-PAKETS        *
  4.  *                       ~~~~~                                            *
  5.  *             es wurde im September 1987 von mir hinzugefügt             *
  6.  *                   es beansprucht KEINERLEI Rechte !                    *
  7.  *                                                                        *
  8.  *        Für Details über die Rechte an DBW_Render lest bitte das        *
  9.  *               File COPYING und den Beginn von RAY.DOC !                *
  10.  *                                                                        *
  11. /**************************************************************************/
  12.  **********                                                     ***********
  13. ******       Anleitung zum Ray-Tracer DBW_RENDER von D.B.WECKER      *******
  14.  **********                                                     ***********
  15.   ************************************************************************
  16.  **********            Übersetzt  von  Andreas Werner           ***********
  17. ********                Sept 1987   /   Blumenstr.13                 *******
  18.  **********                  7ooo Stuttgart - 1                 ***********
  19.   ************************************************************************
  20.  
  21. INHALT:
  22. ~~~~~~~
  23.    Einleitung
  24.    Inhalt des Programmpakets
  25.    Weiterentwicklungen
  26.    Hintergrund-Infos
  27.    RAY
  28.    RAY2
  29.    DISPLAY
  30.    Schreiben eines .DAT-Files
  31.    Quellcode-Infos
  32.  
  33. EINLEITUNG:
  34. ~~~~~~~~~~~
  35. Wer die schon früher erschienenen Ray-Tracing Bilder mag, wird
  36. DBW_Render lieben. Dieses Paket ist eine KOMPLETTE übertragung des
  37. Ray-Tracers,den der Autor auf einer VAX benutzte, um solche Bilder zu
  38. erstellen.(it's really phantastic!!!).
  39. Er läuft auf einem Standard-Amiga mit 512k Ram (und kann, wenn nötig,
  40. für 256k umgestellt werden). Durch die Hinzufügung von AI-heuristics(??)
  41. wird die Rechenzeit in die Größenordnung einer VAX-780 gerückt (auch wenn
  42. der Amiga weder Fliesskomma-Prozessor noch virtuellen Speicher besitzt)!
  43. Ohne AI-heuristics benötigt z.B. das Bild 'glass' auf einem Amiga 50 Std.
  44. Mit den Heuristics sind es - bei voller Auflösung - nur 11 Stunden!
  45.  
  46. INHALT DES PAKETS:
  47. ~~~~~~~~~~~~~~~~~~
  48.    RAY          - Ray-Tracing Programm
  49.    RAY2         - Post-Prozesseor, um das IFF/ILBM-Format zu erzeugen
  50.    DISPLAY      - Zeigt die von RAY2 erzeugten Bilder
  51.    *.DAT        - Eingabe-Dateien (ASCII) für RAY
  52.    *.TMP        - RAY Ausgabe-Dateien
  53.    *.ILBM       - RAY2 Ausgabe-Dateien
  54.    *.c          - Alle MANX-Aztec C Quellcodes des Pakets
  55.    *.h          - Alle MANX-Aztec C Include-Dateien
  56.    RAY.DOC      - Komplette Anleitung
  57.    COPYING      - Generelle Lizens-Bestimmungen
  58.  
  59. BITTE lest die Lizens-Bestimmungen (File 'COPYING'), bevor ihr weiterlest!
  60.  
  61. WEITERENTWICKLUNGEN:
  62. ~~~~~~~~~~~~~~~~~~~~
  63. Abhängig vom Interesse an diesem Programm, wird der Autor an folgenden
  64. Updates weiterarbeiten :
  65.  
  66.    DBW_ED3D  ein 3-dimensionaler Grafik-Editor (sodaß man die Eingaben
  67.              für RAY nicht mehr mathematisch angeben muß, sondern ein-
  68.              fach zeichnen kann.
  69.  
  70.    DBW_FILM  womit eine Filmsequenz aus HAM-Bildern möglich wird (dann
  71.              könnt ihr eure eigenen "Juggler"-ähnlichen Demos machen).
  72.  
  73.    --------  eine Version des Programms für die Verwendung mit Speicher-
  74.              erweiterung und Fliesskomma-Coprozessor.
  75.  
  76.    --------  Verbesserungen und Erweiterungen zum bestehenden Paket.
  77.  
  78. HINTERGRUND-INFORMATIONEN:
  79. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  80. Das DBW_Render Paket benutzt einen sogenannten 'Distributed Ray Tracing-
  81. Alogarithmus'. Über eine ganz nette Lösung des Problems der 'versteckten
  82. Linien' hinaus, bietet Ray-Tracing (generell) die Möglichkeit für
  83. sehr realistische Schattierungs- und Beleuchtungs-Berechnungen.
  84. Dieses Programm ist in MANX-Aztec C geschrieben und läuft auf jedem
  85. Amiga. Das RAY-Programm kann Bilder erzeugen, die aus vier einfachen
  86. geometrischen Objekten aufgebaut sind: Kugeln, Parallelogramme, Dreiecke
  87. und flache Ringe. Hier einige der Besonderheiten des Programms:
  88.  
  89.   - Bestimmung korrekter Schatten, erzeugt von beliebig platzierten
  90.     Lichtquellen, geworfen von beliebig geformten Objekten auf
  91.     beliebig geformte Objekte.
  92.   - Diffuse und theoretische Reflexionen (mit beliebigem Glanz oder
  93.     Politur). Bildung von diffus reflektiertem Licht zwischen den
  94.     Objekten, was unter anderem sehr gut Farbverwischungen bei
  95.     benachbarten, kontrastreich gefärbten Objekten simuliert.
  96.   - Spiegelungen mit einstellbarer Glätte und Zustand der Oberfläche.
  97.   - Lichtbrechung und Transparenz (was mikroskopisch feine Oberflächen-
  98.     Strukturierungen - ähnlich geätztem Glas - ermöglicht).
  99.   - Zwei Arten von Lichtquellen: direktes Licht (paralelle Lichtstrahlen)
  100.     mit konstanter Intensität und kugelförmiges Licht (wie Glühbirnen,
  101.     die entsprechend einer Funktion aus Radius und Entfernung einen
  102.     Halbschatten werfen), wobei hier die Intensität mit dem umgekehrten
  103.     quadratischen Gesetz abnimmt.
  104.   - Photographische Tiefenschärfe. D.h. die virtuelle Kamera kann auf
  105.     ein bestimmtes Objekt in der Szene eingestellt werden, wobei noch
  106.     die Blende verstellt werden kann, um die Tiefenschärfe anzupassen.
  107.   - Räumliche Strukturierung. Normalerweise wird ein einzelnes Objekt
  108.     (sagen wir eine Kugel) betrachtet, als hätte sie gleichmäßige
  109.     Eigenschaften, was oft unecht wirkende Gebilde zur Folge hat.
  110.     Räumliche Strukturierung ist ein Weg, die Oberflächen-Eigenschaften
  111.     alogarithmisch zu verändern (sodaß die ganze Oberfläche nicht
  112.     mehr gleichmäßig ist), um ein Material der realen Welt darzustellen.
  113.     Bis jetzt kann das Programm Holz, Murmeln, Backsteine, schnee-
  114.     bedeckte Berge, Wasser (mit beliebigen Wellen) und einige abstrakte
  115.     Dinge wie Farbverläufe erzeugen.
  116.   - Fractals. Das Programm enthält auch, was bekannt ist als 'Rekursive
  117.     Dreiecks-Teilung' und allerlei natürlich aussehende Gebilde hervor-
  118.     bringt (z.B.Felsbrocken,Berge,etc.). Die Eigenschaften des fraktalen
  119.     Gebildes (Grad der Feinheit,Verzerrung,etc.) wird mit Parametern des
  120.     Programms eingestellt.
  121.   - AI-heuristics, um die Rechenzeit einer Szene auf eine bestimmte
  122.     Länge festlegen zu können.
  123.  
  124. Wenn das RAY-Proramm läuft, liest es eine Art Kommando-Datei ein, die
  125. eine geometrische Beschreibung der darzustellenden Szene incl. der
  126. gewünschten Beleuchtung, Kameraposition, usw. enthält. Dann rechnet das
  127. es lange Zeit und schreibt dabei jede errechnete Zeile auf Disk.
  128. Hier das Format einer solchen Zeile (im .TMP-File):
  129.  
  130.    <Zeile  Nummer>     -   2 Bytes
  131.    <Rote   Pixels>     - 160 Bytes (4 Bytes pro Pixel)
  132.    <Grüne  Pixels>     - 160 Bytes (       "         )
  133.    <Blaue  Pixels>     - 160 Bytes (       "         )
  134.  
  135. Für einen ganzen Bildschirm (400 Zeilen) ist dieses File 192.800 Bytes
  136. lang. Ein zweites Programm (RAY2) wird benötigt, um eine der drei
  137. folgenden Auflösungen für das Ausgabe-File zu generieren :
  138.  
  139.    4096 Farben (HAM-Modus) Interlaced bei 320x400 Auflösung
  140.      32 Farben             Interlaced bei 320x400     "
  141.      32 Farben                        bei 320x200     "    (DP-Format)
  142.  
  143. Alle Dateiformate entsprechen dem IFF/ILBM Standard und können mit dem
  144. mitgelieferten DISPLAY-Progamm angesehen werden.
  145. Alles in allem repräsentiert das DBW_Render-Paket über 4000 Zeilen
  146. C-Quellcode. Es basiert weitestgehend auf original Alogarithmen für
  147. die VAX von Tom Dahl und Tone Engel bei Digital Equipment Corporation.
  148. Die Übertragung auf den Amiga hat mehrere Monate gedauert.
  149.  
  150.  RAY :
  151. ~~~~~~~
  152. ZUR ERINNERUNG: BEVOR IHR IRGENDETWAS STARTET, MACHT EINE KOPIE
  153.                         DIESER ORIGINAL-DISKETTE !!!
  154.  
  155. Sobald man ein Eingabe-File hat (Beschreibung weiter unten bei "Schreiben
  156. eines .DAT-Files"), kann man den Ray-Tracer starten. Denkt aber daran,
  157. daß die Ausgabe von RAY für einen ganzen Screen 192.800 Bytes oder über
  158. 400 Blocks beträgt. Vergewissert euch also, ob noch genug Platz auf der
  159. Diskette ist. Es ist NICHT möglich die Ausgabe in die RAM-Disk umzuleiten
  160. (Guru läßt grüßen)! Außerdem müßt ihr den Stack auf mindestens 10000 her-
  161. aufsetzen (1> stack 10000).
  162. Wenn nun das Eingabe-File z.B. 'glass.dat' heisst, kann RAY mit
  163.  
  164.       1> ray glass
  165.  
  166. gestartet werden. Alle Optionen müssen im .DAT-File abgespeichert sein.
  167. Seht euch das File 'glass.dat' auf dieser Disk mal an (1> type glass.dat).
  168. Das Programm produziert beim Laufen ein Ausgabe-File Namens 'glass.tmp'.
  169. Wenn ein anderer Name für das Ausgabefile als für das Eingabefile ge-
  170. wünscht wird, kann man den Ray-Tracer auch nur mit
  171.  
  172.       1> ray
  173.  
  174. starten. Dieser fragt dann nach dem Input-File:
  175.  
  176.       Scene description file?
  177.  
  178. worauf man mit 'glass.dat' antworten kann. Das Programm fordert daraufhin
  179. den Namen des Output-Files:
  180.  
  181.       File name to save picture (.tmp)?
  182.  
  183. worauf man z.B. mit 'df1:glass.tmp' antwortet.
  184. Das Programm wird nun das Bild errechnen. Beachtet, daß IMMER vier extra
  185. Zeilen vor und nach der Szene gerechnet werden. Bei einem vollen Screen
  186. von 400 Zeilen beginnt das Programm also mit Zeile -4 und endet mit
  187. Zeile 403. Das liegt daran, daß die AI-heuristics eine ganze Zeile
  188. zwischenspeichern müssen, bevor sie sie ausgegeben können.
  189. Wenn das Programm fertig ist, gibt es einige Statistiken über das Bild
  190. aus. Am interessantesten sind dabei die 'GUESSED'(vergessenen), im Gegen-
  191. satz zu den 'COMPUTED'(gerechneten) Pixels. Dies gibt einen Hinweis auf
  192. die zu erwartende Qualität des Bildes (0=perfekt). Diese Zahlen werden
  193. von der im Kommando-File angegebenen Rechenzeit ('R') bestimmt.
  194.  
  195.  RAY2 :
  196. ~~~~~~~~
  197. Nachdem RAY seine Arbeit getan hat, kann das (oder die) Ausgabe-.TMP-File
  198. von RAY2 nachbearbeitet werden. Aus folgenden Gründen können mehrere Files
  199. angegeben werden:
  200.  
  201.    1) Falls die Maschine abstürtzt und man konnte einen Teil retten,
  202.       so kann dieser weiterverwendet werden.
  203.    2) Man kann das Bild in Streifen rechnen lassen.
  204.    3) Wenn einige Teile aufgrund zu geringer Rechenzeit verwaschen
  205.       sind, kann man sie auf diese Weise nachberechnen lassen.
  206.  
  207. Das alles wird klarer wenn wir das Beispiel mit
  208.  
  209.       1> ray2 glass
  210.  
  211. starten. Nun wird die Datei 'glass.tmp' (Ausgabe von RAY) geöffnet.Beim
  212. Lesen werden die am meisten verwendeten Farben herausgesucht, ein Custom-
  213. Screen geöffnet und das Bild gemalt .Dann werden die Daten wieder vom Bild-
  214. schirm gelesen und in eine neue Datei 'glass.ilbm' geschrieben. Wenn
  215. das Programm fertig ist, blinkt der Bildschirm kurz auf und man kann das
  216. Programm mit einem unsichtbaren Schliess-Gadget links oben beenden.
  217. Während das Programm in die Ausgabedatei schreibt, wird der erste Pixel
  218. jeder Zeile invertiert, sodaß man den Vorgang am Bildschirm verfolgen kann.
  219.  
  220. Hier ein Beispiel, bei dem alle Optionen von RAY2 verwendet werden:
  221.  
  222.       1> ray2 -c 1 -h 1 -l 1 -o glass.ilbm glass
  223.  
  224. Die Optionen sind:
  225.  
  226.       -c        = Komprimiertes Datenformat (0 oder 1) (default = ja = 1)
  227.       -h        = Hold-And-Modify Modus     (0 oder 1) (default = ja = 1)
  228.       -l        = Interlace Modus           (0 oder 1) (default = ja = 1)
  229.       -o        = Name des RAY2-Ausgabe-Files
  230.       <name>    = ein bis zu 10 Buchstaben langer Filename
  231.  
  232. Das gezeigte Beispiel wird genau das gleiche Bild ergeben, wie das vorher-
  233. gehende (weil nur die default-Werte genommen wurden). Wenn wir das ein-
  234. fachste Format (DeluxePaint) wollen und wir haben mehrere .TMP-Files,
  235. können wir schreiben:
  236.  
  237.       1> ray2 -h 0 -l 0 -o glass.pic glass1 glass2 glass
  238.  
  239. Das Programm übernimmt IMMER (wenn möglich) die Zeilen der vorangehenden
  240. Dateien. So enthält zum Beispiel die Datei 'glass.tmp' ein komplettes
  241. 12-Stunden Bild. 'glass1.tmp' und 'glass2.tmp' enthalten die Zeilen um
  242. die Lichtquellen herum, die im 'glass.tmp'-File verwaschen sind, nur mit
  243. einer Auflösung von 24 Stunden, sodaß sie wesentlich besser werden (jedes
  244. braucht etwa eine Stunde).
  245. RAY2 beinhaltet ebenfalls AI-heuristics, um die 4096 Farben in eine
  246. Palette mit 32 Farben umzurechnen (wenn der HAM-Modus abgeschaltet ist).
  247.  
  248.  DISPLAY :
  249. ~~~~~~~~~~~
  250. DISPLAY wird ganz einfach mit
  251.  
  252.       1> display glass
  253.  
  254. gestartet, worauf 'glass.ilbm' auf dem Bildschirm gezeigt wird. Man
  255. kann aber auch den ganzen Namen (z.B.'glass.pic') angeben, wenn er nicht
  256. mit '.ILBM' endet.
  257. Das Bild wird angezeigt, bis wiederum das unsichtbare linke obere Schliess-
  258. Gadget angeklickt wird. Nicht vergessen: Mit <Amiga-n> bzw. <Amiga-m> kann
  259. zwischen Workbench- und DISPLAY-Screen umgeschaltet werden.
  260.  
  261. SCHREIBEN EINES .DAT-FILES:
  262. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  263. Okay, nun zum harten Teil: Der Inhalt des Script-Eingabe-Files (.DAT)!
  264. Die Datei ist ein Standard ASCII Text File, wobei jede Zeile ein Objekt
  265. definiert oder ein anderes Kommando für RAY darstellt. Jede Zeile beginnt
  266. mit einem - großen oder kleinen - Buchstaben, der für das jeweilige Kom-
  267. mando steht. Die Kommandos sind:
  268.  
  269.    R  - Auflösung (default =  12.0 Stunden)
  270.    N  - genereller Lichtbrechungs-Faktor (default = 1.0)
  271.    Z  - Erzeugen eines 2D-Histogramms (default = 3D)
  272.    a  - verstärktes Umgebungslicht (default = 0.0)
  273.    A  - Antialiasing (default = kein Antialiasing)
  274.    F  - Tiefenschärfe und Blende der Kamera (default = unendlich)
  275.    M  - generell diffuse Beleuchtung (default = nicht diffus)
  276.    &  - Start- und End-Zeile der Berechnung
  277.   *,! - Kommentar (wird ignoriert)
  278.    b  - Hintergrund-Farbwerte
  279.    w  - Wellenstruktur
  280.    g  - Farbverlauf
  281.    n  - Schneefall
  282.    k  - 3D-Schachbrettmuster
  283.    H  - genereller Dunst-Faktor (default = keine Vergrauung)
  284.    f  - Fractal-Struktur
  285.    m  - Murmeln-Struktur
  286.    d  - Holz-Maserung
  287.    e  - Kamera-Blickpunkt und -Richtung
  288.    l  - paralleles Licht
  289.    L  - kugelförmiges Licht
  290.    {  - Start einer Erweiterung
  291.    }  - Ende der Erweiterung
  292.    s  - Kugel          \
  293.    t  - Dreieck         \
  294.    x  - Fractal          =>   Objekte
  295.    q  - Paralellogramm  /
  296.    r  - Ring           /
  297.  
  298. Zunächst einmal bestehen alle Farbangaben aus drei Zahlen zwischen 0 und 1.
  299. Die Reihenfolge ist BLAU, GRüN, ROT.
  300. Alle Positions- und Richtungsangaben sind aus drei zueinander relativen
  301. Werten mit freier Maßeinteilung zusammengesetzt, und zwar in der Reihen-
  302. folge 'X,Y,Z'. Angenommen man schaut in negativer Z-Richtung in den
  303. Bildschirm, dann ist positiv-X nach rechts, positiv-Y nach oben und
  304. positiv-Z senkrecht aus dem Bildschirm heraus.
  305. Okay, nun zu den Eigenheiten der einzelnen Parameter. Zuerst kommen die
  306. generellen Kommandos (Strukturdefinitionen usw.), dann folgen die Kommandos,
  307. die die Objekte definieren.
  308.  
  309.  
  310.                     Genereller Lichtbrechungs-Faktor
  311.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  312. N INDEX (0-1)
  313.     Dieser Wert wird als Index für die Lichtbrechung der Luft verwendet.
  314.  
  315.  
  316.                               Auflösung
  317.                               ~~~~~~~~~
  318. R AUFLÖSUNG (1.0-30.0)
  319.     Die Auflösung bestimmt die MAXIMALE Rechenzeit für einen 400-Zeilen-
  320.     Bildschirm. Sie wird in Stunden angegeben und sollte zwischen 1.0 und
  321.     30.0 liegen. Je mehr Zeit das Programm bekommt, desto besser wird
  322.     natürlich auch das Bild.
  323.  
  324.  
  325.                     Erzeugung eines 2D-Histogramms
  326.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  327. Z FLAG (0/1)
  328.     Normalerweise entspricht der Inhalt eines .TMP-Files, das RAY
  329.     produziert einer binären Pixel-Version der Szene. Wie auch immer,
  330.     um die Berechnung einer Szene mit Antialiasing zu beschleunigen,
  331.     kann man in der Kommando-Datei den Befehl 'Z 1' angeben. Dann wird
  332.     das Bild als eine Art 2D-Histogramm in Graustufen im .TMP-File
  333.     abgelegt (je heller, desto mehr Rechenschritte werden für einen
  334.     Pixel benötigt). Dieser Befehl ist aber nur sinnvoll, wenn der
  335.     Antialiasing-Wert 'A' nicht auf default (1 1.0) steht. Wenn doch,
  336.     wird grundsätzlich die gleiche Zeit für jeden Pixel aufgewendet, und
  337.     das Z-Kommando führt zu einer einheitlich grauen Fläche. Der A-Befehl
  338.     aber sagt dem Ray-Tracer, daß er sich auf bestimmte Details konzen-
  339.     trieren soll,um dadurch ein Aliasing-freies Bild zu erzeugen. Mit
  340.     dem Z-Kommando kann man nun die besonders rechenintensiven Bereiche
  341.     (wo der Ray-Tracer Kanten glättet) sichtbar machen.
  342.  
  343.  
  344.                       Verstärktes Umgebungslicht
  345.                       ~~~~~~~~~~~~~~~~~~~~~~~~~~
  346. a FAKTOR (0.0-1.0)
  347.     Wie weiter unten beschrieben, enthält jedes Objekt einer Szene Para-
  348.     meter, die kontrollieren, wie hell das Objekt erscheint, wenn kein
  349.     Licht darauf fällt. Man kann also ein Objekt im Schatten heller
  350.     darstellen, als ein anderes. Alternativ kann man einen FAKTOR von
  351.     0 bis 1 angeben und das Umgebungslicht wird als Bruchteil seiner
  352.     diffusen Helligkeit dargestellt. Wenn dieser Parameter angegeben
  353.     wird, haben die BGR-Umgebungslicht-Werte der einzelnen Objekte
  354.     keine Wirkung mehr (müssen aber trotzdem definiert werden). Ein
  355.     annehmbarer Anfangswert für FAKTOR liegt zwischen 0.1 und 0.2.
  356.  
  357.  
  358.                              Antialiasing
  359.                              ~~~~~~~~~~~~
  360. A ANZAHL THRESHHOLD
  361.     Beim default-Wert (1,1.0) berechnet der Ray-Tracer für jeden Pixel
  362.     des Bildes genau einen (Licht-)Strahl (ein 320x400 Pixel großes Bild
  363.     ergibt also ca. 128000 Strahlen). Desöfteren entstehen bei digitaler
  364.     Generierung eines Bildes mit nur einem Strahl unangenehme Nebeneffekte.
  365.     So werden zum Beispiel diagonale Linien als abgesetzte Treppenstufen
  366.     dargestellt -- diese fürchterlichen Zacken! Solche falschen Erschei-
  367.     nungen werden 'Aliasing Effekt' genannt. Es wurden vielerlei Tech-
  368.     niken erfunden, um die Auswirkungen dieses Effekts zu reduzieren,
  369.     die sich alle auf Anti-Aliasing beziehen (es gibt noch viele andere
  370.     Arten von Aliasing-Effekten neben Zacken. Ein weiteres Beispiel sind
  371.     die messerscharfen Schatten, die man traditionellerweise in Computer-
  372.     Bildern findet -- reale Schatten sind immer ein bißchen verschwommen).
  373.       Die ANZAHL gibt an, wieviel Strahlen pro Pixel verfolgt werden; 
  374.     je mehr, desto besser, aber desto langsamer geht's. Ein guter Start-
  375.     Wert ist 4. Es wird dann ein Bündel von vier Strahlen zufällig in
  376.     den 'Pixel-Kegel' geschickt, die über die horizontale und vertikale
  377.     Dimension verteilt (distributed) sind; daher sagt man, daß dieser
  378.     Ray-Tracer 'Distributed Ray Tracing' beherrscht.
  379.       Der THRESHHOLD-Wert bezieht sich auf eine etwas kompliziertere
  380.     Eigenschaft des Ray-Tracers, genannt 'Statistically Optimized Distri-
  381.     buted Ray Tracing' (statistisch optimierte verteilte Strahlen-Verfol-
  382.     gung). Das geht so vor sich, daß das Programm die Stärke der ein-
  383.     zelnen Strahlen des Bündels berechnet, die auf den Pixel 'verteilt'
  384.     werden; also die statistische Abweichung der z.B. vier Intensitäten.
  385.     Wenn die Abweichung klein ist, ist es wahrscheinlich, daß dies eine
  386.     glatte Stelle im Bild ist.
  387.     Es wird also eine gute Annäherung an die Original-Intensität des
  388.     Pixels erreicht. Aber angenommen, der Pixel befindet sich gerade an
  389.     einer diagonalen Kante, so werden einige der Strahlen auf die eine
  390.     Fläche geworfen und einige auf die andere. Die Abweichung wird also
  391.     groß sein. Das Programm beachtet dies, und wenn die Abweichung den
  392.     THRESHHOLD-Wert überschreitet, 'verteilt' es eine weitere Gruppe von
  393.     (in diesem Fall) vier Strahlen auf den Pixel. Nun wird die Intensi-
  394.     täts-Abweichung der acht Strahlen errechnet und der Vorgang wieder-
  395.     holt, bis entweder die gewünschte Glätte, oder die beliebig einge-
  396.     stellte maximale ANZAHL Strahlen erreicht ist. THRESHHOLD-Werte
  397.     größer oder gleich 1.0 bewirken keine extra Bündel außer dem mit
  398.     ANZAHL angegebenen. Sinnvolle Werte für THRESHHOLD liegen im Bereich
  399.     von 0.0001 bis 0.1.
  400.  
  401.  
  402.                     Tiefenschärfe und Blende der Kamera
  403.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  404. F BLENDE ENTFERNUNG
  405.     Wenn dieses Kommando weggelassen wird, werden alle Objekte perfekt
  406.     Scharf abgebildet. Mit ihm kann man aber nun Tiefenschärfe-Effekte
  407.     erzielen (was die Rechenzeit wiederum erheblich steigert!).
  408.     Die BLENDE bestimmt die Größe der Kameralinse. Sie hängt wie auch die
  409.     ENTFERNUNG vom verwendeten Koordinatensystem ab; aber vorausgesetzt
  410.     eine Einheit steht für einen Zentimeter und die ENTFERNUNG beträgt
  411.     100 Einheiten, dann sollte sich BLENDE zwischen 0.5 und 2.0 bewegen.
  412.       Um einen sanften Verlauf von Vordergrund zu Hintergrund zu er-
  413.     reichen, muß man den Anti-Aliasing Parameter (A-Kommando) ANZAHL auf,
  414.     sagen wir, 20 bis 30 und THRESHHOLD auf 1.0 setzen.
  415.  
  416.  
  417.                         Generell diffuses Licht
  418.                         ~~~~~~~~~~~~~~~~~~~~~~~
  419. M ANZAHL ZÄHLER NENNER
  420.     Dieser Befehl bezieht sich auf die realistische Ausbreitung des Lichts,
  421.     wenn es von Objekt zu Objekt reflektiert wird. Üblicherweise werden bei
  422.     einer computerberechneten Beleuchtung die Oberflächen der Objekte ent-
  423.     sprechend ihrer Farbe, ihres Materials und der Stärke des Lichts ein-
  424.     gefärbt. Die Teile, die nicht direkt im Licht liegen werden schwarz
  425.     gezeichnet. Nun, das sieht sehr künstlich aus und deshalb wird den
  426.     schattigen Bereichen ein konstanter Farbwert zugeordnet (hier mit dem
  427.     'a'-Kommando bzw. dem individuellen Umgebungslicht(s.u.)).
  428.       In der Realität gibt es aber auch im Schatten Licht, das von anderen
  429.     Gegenständen reflektiert wird. Dazu dient der 'M'-Befehl (leider erhöht
  430.     sich dadurch die Rechenzeit wieder einmal mehr). Das Programm sammelt
  431.     nun für jeden Pixel weitere zufällige Strahlen, um zu ergründen, was
  432.     in der näheren Umgebung noch als Reflektor arbeitet. Die ANZAHL be-
  433.     stimmt dabei, vieviel Strahlen hinzugenommen werden. Werte von 10 an
  434.     aufwärts sind möglich; bei 100 und mehr erhält man weiche Farbverläufe.
  435.       ZÄHLER UND NENNER haben mit der rekursiven Natur des Ray-Tracings
  436.     zu tun: angenommen, ein Strahl wird berechnet, der auf die dargestellte
  437.     Oberfläche fällt und dabei auch die benachbarte Fläche berührt. Von
  438.     dieser Fläche wird nun auch ein Strahlenbündel genommen, um ihre Farbe
  439.     zu berechnen usw. Dabei schwillt die Anzahl der Strahlen exponentiell
  440.     an. Um das zu verhindern, wird für jede Rekursion die Anzahl der
  441.     Strahlen auf einen Bruchteil von ANZAHL gesetzt. Dieser Bruch wird
  442.     mit ZÄHLER und NENNER angegeben und sollte bei bei 1/3 bis 1/4 liegen.
  443.  
  444.  
  445.                            Start- und End-Zeile
  446.                            ~~~~~~~~~~~~~~~~~~~~
  447. & START ENDE
  448.     Wird der Befehl weggelassen, wird ein komplettes Bild mit 320x400
  449.     Pixel errechnet. Das Programm geht von Zeile START bis ENDE-1. Man
  450.     kann komplexere Szenen auch in Stücken rechnen und mit RAY2 nachher
  451.     zusammenmischen.
  452.  
  453.  
  454.                              Hintergrund-Farbe
  455.                              ~~~~~~~~~~~~~~~~~
  456. b BLAU GRüN ROT
  457.     Einfach die drei Farbwerte für den Hintergrund.
  458.  
  459.  
  460.                               Wellenstruktur
  461.                               ~~~~~~~~~~~~~~
  462. w ZENTRUM-X Y Z  WELLENLÄNGE AMPLITUDE DÄMPFUNG PHASE
  463.     Einige Parameter des Programms benutzen Wellenformen als Basis für
  464.     ihre Effekte (am auffälligsten bei geriffelten Oberflächen,z.B.Wasser).
  465.     Man kann bis zu 100 Wellenformen pro Szene definieren wobei das Pro-
  466.     gramm eine Wellenform-Tabelle anlegt, auf die die jeweiligen Befehle
  467.     zugreifen. Die ersten drei Zahlen (ZENTRUM-X Y Z) legen die Mitte der
  468.     konzentrischen Welle fest. WELLENLÄNGE ist die Strecke von einem
  469.     Wellenberg zum nächsten. AMPLITUNDE gibt die Höhe der Welle durch
  470.     einen Wert zwischen 0.1 (flach) und 0.5 (hoch) an. Mit DÄMPFUNG stellt
  471.     man die Abnahme der Höhe bei Entfernung vom Mittelpunkt ein. 1.0 be-
  472.     deutet: keine Dämpfung; bei 0.7 beträgt die Höhe der folgenden Welle
  473.     70% der vorhergehenden. PHASE bestimmt die Starthöhe der Welle. Die
  474.     Werte gehen von 0.0 (Wellenberg) über 0.5 (Tal) bis 1.0 (Berg). Das
  475.     kann bei Bildsequenzen bewegtes Wasser simulieren.
  476.  
  477.  
  478.                               Farbverläufe
  479.                               ~~~~~~~~~~~~
  480. g FARBE-BLAU GRüN ROT  START BEREICH
  481.     Normal hat ein Objekt von oben bis unten die gleiche Farbe. Mit diesem
  482.     Kommando aber kann man einen Verlauf der Farbe in Richtung der Y-Achse
  483.     programmieren. Bis zu 10 solcher Verläufe sind möglich.
  484.     FARBE-BLAU GRÜN ROT bestimmt die Farbe, zu der die Grundfarbe des Ob-
  485.     jekts (angegeben unten bei 'diffuses Objektlicht') hin verläuft. START
  486.     definiert die Y-Koordinate, bei der diese überblendung beginnen soll.
  487.     Alle Punkte darunter werden in der Grundfarbe des Objekts gemalt.
  488.     BEREICH gibt die Y-Einheiten an, über die sich der Verlauf erstreckt.
  489.     Alle Punkte oberhalb START+BEREICH werden in der mit FARBE-B G R
  490.     bestimmten Farbe gemalt.
  491.  
  492.  
  493.                                Schneefall
  494.                                ~~~~~~~~~~
  495. n START BEREICH FAKTOR THRESHHOLD
  496.     Diese Oberflächenstruktur ist den Farbverläufen sehr ähnlich (und
  497.     außerdem noch in Arbeit). Sie ist hauptsächlich für die unten be-
  498.     schriebenen Fractalen Gebilde gedacht, um sozusagen Schnee darauf
  499.     zu verteilen; und zwar je höher, desto mehr.
  500.     START ist die Y-Koordinate, ab der überhaupt Schnee liegt. BEREICH
  501.     gibt die Höhe des schneebedeckten Feldes an. Der Teil oberhalb
  502.     von START+BEREICH ist ganz bedeckt. FAKTOR ist ein Regler, um die
  503.     Stärke des 'Schneefalls' in Abhängigkeit von der Höhe zu setzen.
  504.     Bei 0.0 findet keine Beeinflussung statt. Werte über 1.0 resultieren
  505.     in einem schnelleren Aufbau der Schneedecke schon am unteren Rand von
  506.     BEREICH (?;siehe Beispiel 'island.dat'). Mit THRESHHOLD läßt sich eine
  507.     Beziehung zwischen Höhe, Steigung und Schneedecke herstellen. Bei 0.0
  508.     wird alles ab START ganz bedeckt sein; bei Werten zwischen 0.0 und 1.0
  509.     resultiert die Schneedecke aus einer Funktion aus Steigung und Höhe.
  510.     Bei THRESHHOLD 0.4 wird die Oberfläche ab etwa 40 Grad Steigung zuneh-
  511.     end mit Schnee bedeckt.
  512.  
  513.  
  514.                           3D-Schachbrett-Muster
  515.                           ~~~~~~~~~~~~~~~~~~~~~
  516. k FARBE-BLAU GRÜN ROT  X Y Z  JUNK1 JUNK2 JUNK3
  517.     Bis zu 10 Schachbrettmuster können definiert werden. Sie können 1-
  518.     (Schichten), 2- (Schachbrett,Spalten) oder 3-dimensional (Würfel)
  519.     sein. Aufgrund der Farbe eines Oberflächenpunktes bestimmt diese
  520.     Funktion, ob der Punkt die Originalfarbe des Objekts, oder die mit
  521.     FARBE-BLAU GRüN ROT angegebene Farbe bekommt. Um festzusetzen, wel-
  522.     cher Punkt in welcher Farbregion liegt, gibt es die X Y Z -Parameter.
  523.     X definiert die Breite, Y die Höhe und Z die Tiefe der aufeinander
  524.     folgenden Schichten. Beachtet, das ein oder mehrere dieser Parameter
  525.     auf 0 gesetzt werden können, um die Dimensionalität zu beschränken.
  526.     Wenn z.B. Y=0 ist ergeben sich waagerechte Schichten abwechselnder
  527.     Farbe. Wenn alle drei ungleich 0 sind und unterschiedliche Werte
  528.     haben, entsteht ein 3-dimensionales Blockmuster.
  529.     Die JUNKs werden in dieser Version noch nicht benutzt und sollten
  530.     auf 0 gesetzt werden.
  531.  
  532.  
  533.                     genereller Dunst-Faktor (Vergrauung)
  534.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  535. H FARBE-BLAU GRÜN ROT  ENTFERNUNG
  536.     Ohne diesen Befehl ist die Farbe einer dargestellten Oberfläche unab-
  537.     hängig von der Entfernung zum Betrachter. Bei Benutzung des Dunst-
  538.     Faktors kan man den Ray-Tracer veranlassen, die Farben der weiter
  539.     entfernten Objekte kontinuierlich zu der (mit FARBE-B G R) angegebenen
  540.     Farbe fließen zu lassen (natürlicherweise ein bläuliches Grau). Alle
  541.     Punkte, die weiter, als ENTFERNUNG vom Kameraauge weg sind, werden in
  542.     der Dunst-Farbe gemalt, und sind somit unsichtbar.
  543.  
  544.  
  545.                             Fractal-Strukturen
  546.                             ~~~~~~~~~~~~~~~~~~
  547. f WIEDERHOLUNGEN  VERHÄLTNISS-X Y Z  OBERFLÄCHE
  548.     Diese Struktur kann nur für Fractal-Objekte (s.u. bei 'x'-Kommando)
  549.     benutzt werden. Bis jetzt kann der Ray-Tracer nur eine kleine Anzahl
  550.     primitiver Formen bilden, wovon eines das Dreieck ist. Wie beim
  551.     'x'-Kommando weiter unten beschrieben, hat er aber die Fähigkeit,
  552.     komplexe Gebilde zu errechnen, die aus vielen, zusammemhängenden
  553.     Dreiecken bestehen und 'Stochastische Flächen' genannt werden (oft
  554.     als fraktale Flächen bezeichnet, obwohl der Zusammenhang zur Mathe-
  555.     matik der Fractals begrenzt ist). Dieser Befehl definiert die Para-
  556.     meter, die der Ray-Tracer für die Konstruktion des Dreiecks-Netzes
  557.     braucht.
  558.       Um eines von 10 möglichen Fractals definieren zu können, benötigt
  559.     man mindestens eine Wellenform ('w'-Kommando). Der Vorgang einer
  560.     Fractal-Erzeugung basiert auf wiederholter Dreiecks-Teilung, unter
  561.     Verwendung von komplexen Koordinaten-Verschiebungen bei der Bestimmung
  562.     der Scheitelpunkte des geteilten Dreiecks. Man beginnt mit einem Haupt-
  563.     Dreieck, das die ungefähre Größe und Lage des Objekts angibt ('x'-Kom.).
  564.     Das Originaldreieck wird durch Halbierung der Seiten in vier kleinere
  565.     Dreiecke geteilt, wobei die Ecken der neuen Dreiecke im Raum ver-
  566.     schoben werden. WIEDERHOLUNGEN gibt an, wie oft die Teilung ausgeführt
  567.     wird. Je größer diese Tiefe, desto feiner wird die fraktale Oberfläche,
  568.     aber die Rechenzeit geht wieder 'mal hoch. Außerdem brauchen größere
  569.     Werte große Mengen an Speicher, da die Daten der generierten Dreiecke
  570.     dort abgelegt werden (bei einem Wert von '7' z.B. tausende von 512-Byte
  571.     Speicherseiten, also seid vorsichtig!).
  572.       Die drei Parameter VERHÄLTNISS-X Y Z erlauben es, die Verzerrung in
  573.     eine bestimmte Richtung zu lenken (bei X=1 und Z=1 und Y=3.0 entsteht
  574.     z.B. ein dreimal höher als breites Fractal-Gebilde). Bei VERHÄLTNISSen
  575.     gleich 0 werden keine Höhenabweichungen in der jeweiligen Richtung aus-
  576.     geführt (Wenn alle drei 0 sind, sieht man ein flaches Dreieck von oben).
  577.       OBERFLÄCHE bestimmt eine Struktur für das komplette Fractal (die
  578.     Werte entnimmt man den unten aufgeführten Objekt-Strukturen).
  579.       Wie oben erwähnt, braucht man für eine bewegte Fractal-Oberfläche
  580.     ein paar Wellenformen. Ein guter Anfang sind 5 oder 6, deren Ausgangs-
  581.     punkte über die ganze Szene verstreut sein sollten. Unterschiedliche
  582.     Wellenlängen und Amplituden verstärken die Verzerrung des Fractals.
  583.     Die Wellen-DÄMPFUNG sollte gering sein (um 1.0). Die genaue Art und
  584.     Weise, wie die Wellen auf das Fractal wirken, liegt jenseits jeder
  585.     vernünftigen Beschreibung; es genügt zu sagen, daß kein Zufall im Spiel
  586.     ist, und verschiedene Wellenformen ergeben ausgesprochen unterschied-
  587.     liche Formen; experimentiert !((und wartet...))
  588.  
  589.  
  590.                             Murmel-Strukturen
  591.                             ~~~~~~~~~~~~~~~~~
  592. m INBLAU INGRüN INROT  XMAß TURBULENZ DICKE
  593.     Man kann bis zu 10 Murmel-Strukturen definieren. Hier benötigt man
  594.     ebenfalls mindestens eine Wellenform.
  595.       Murmeln bestehen aus einem Basismaterial und Einschlüssen aus einem
  596.     anderen Stoff. Die Grundfarbe wird durch die Angabe bei 'diffuse Re-
  597.     flexion' (s.u.) festgelegt. Die Farbe der Einschlüsse wird durch
  598.     INBLAU INGRüN und INROT bestimmt. Die resultierende Farbe ist ein
  599.     komplexer Verlauf der beiden Materialfarben.
  600.       Es werden ein paar Schichten entlang der X-Achse, zunächst alle an
  601.     derselben Stelle, positioniert. Ihre Breite wird mit XMAß angegeben
  602.     (Werte von 0.1 bis 1.0). Dann wird die TURBULENZ hinzugefügt, um die
  603.     Schichten in unzählige Windungen und Streifen zu verwandeln. Werte
  604.     zwischen 1.0 und 3.0 sind ganz hübsch. Die grobe DICKE der Streifen
  605.     wird mit einem Integer (ganze Zahl) angegeben, wobei '1' normale, '2'
  606.     halbe, '3' ein viertel der Dicke usw. ergibt.
  607.       Die Turbulenz  wiederum wird von den definierten Wellenformen beein-
  608.     flusst. Die Beziehung zwischen einer bestimmten Wellenform und der
  609.     resultierenden Turbulenz ist unmöglich vorherzusagen. Alles was getan
  610.     werden kann, ist, grobe Richtlinien für die Parameterwerte zu geben.
  611.     Zunächst werden 4 oder 5 Wellenformen benötigt. Die Zentren sollten
  612.     gut über die ganze Szene verteilt sein. Die Wellenlängen sollten stark
  613.     variieren (manche vier und fünfmal so lang sein, wie andere). Dämpfung
  614.     sollte keine eingestellt sein (0.95-1.0).
  615.  
  616.  
  617.                             Holz-Strukturen
  618.                             ~~~~~~~~~~~~~~~
  619. d BLAU GRÜN ROT  STÄRKE RINGMAß TURBULENZ DICKE
  620.     Wieder sind 10 Holz-Strukturen pro Szene möglich. Wieder muß mindes-
  621.     tens eine Wellenform definiert sein. Die Holz-Struktur wird ganz
  622.     ähnlich, wie die Murmel-Struktur erzeugt, außer, daß das Holz nicht
  623.     aus Schichten aufgebaut wird, sondern aus konzentrischen Röhren des
  624.     Basismaterials entlang der Y-Achse. RINGMAß entspricht dem XMAß bei
  625.     den Murmeln, ebenso verhalten sich TUBULENZ und DICKE. STÄRKE kon-
  626.     trolliert, wie stark oder schwach die Maserung ausgebildet wird.
  627.     Werte über 1.0 verstärken die Maserung, Werte unter 1.0 dämpfen sie.
  628.  
  629.  
  630.                      Kameraposition und Blickrichtung
  631.                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  632. e XPOS YPOS ZPOS  XBLICK YBLICK ZBLICK  XUP YUP ZUP
  633.     Die ersten drei Zahlen setzen die Position der imaginären Kamera. Die
  634.     nächsten drei bestimmen die Richtung relativ zu diesem Punkt und
  635.     definieren, was zu sehen ist. Die Länge dieses Vektors bewirkt einen
  636.     'Tele/Weitwinkel-Effekt', wobei der Bildschirm an seiner Spitze mit
  637.     einem Verhältnis von 256 zu 170 Einheiten dargestellt wird. Kamera-
  638.     position und die Länge des Blickrichtungs-Vektors sind also eng mit-
  639.     einander verknüpft und bilden zusammen den Blickwinkel (oder -Kegel).
  640.     Die letzten drei Parameter geben eine Höhe an, um die der Blickpunkt
  641.     heraufgesetzt wird; normalerweise wird man mit 0 1 0 hinkommen.
  642.  
  643.  
  644.                             Paralleles Licht
  645.                             ~~~~~~~~~~~~~~~~
  646. l BLAU GRÜN ROT  XRICHT YRICHT ZRICHT
  647.     Die ersten drei Parameter stehen für die Farbe bzw. Intensität der
  648.     Lichtquelle (1.0 1.0 1.0 entspricht Weiss, 0.5 0.5 0.5 ist dunkles
  649.     lila). Die restlichen drei Werte geben die Richtung an, aus der das
  650.     Licht kommt. Bei '1 0 0' z.B. negativ entlang der X-Achse. Man kann
  651.     maximal 100 Lichtquellen definieren; aber viele Lichter verlaaaaaa-
  652.     aaangsamen die Sache nocheinmal. Zwei sind vertretbar.
  653.  
  654.  
  655.                            Kugelförmiges Licht
  656.                            ~~~~~~~~~~~~~~~~~~~
  657. L BLAU GRüN ROT  ZENTRUM-X Y Z  AUSBREITUNG RADIUS
  658.     Das erste Zahlentripel entspricht dem bei parallelem Licht. Die drei
  659.     nächsten Daten bestimmen die Position des Mittelpunktes, der über-
  660.     all inner- oder außerhalb des sichtbaren Bereichs liegen kann. Be-
  661.     achtet aber, daß die Lichtquelle selbst nie sichtbar ist! Wenn man
  662.     also z.B. eine Glühbirne will, muß man auf die gleichen Koordinaten
  663.     eine durchsichtige Kugel mit dem gleichen Radius setzen. Die AUS-
  664.     BREITUNG gehorcht dem umgekehrten quadratischen Gesetz, nach dem
  665.     die Helligkeit innerhalb der Szene vermindert wird. Um zu verdeut-
  666.     lichen, wie man einen Wert für AUSBREITUNG findet, hier ein Beispiel:
  667.     Angenommen, man will mit einer Glühbirne bei vollem Licht (1 1 1)
  668.     einen Tisch im Abstand von z.B. 37 Einheiten gut ausleuchten, so
  669.     setzt man AUSBREITUNG auf eben diese 37 Einheiten. Dann werden Gegen-
  670.     stände, die näher beim Licht liegen überbelichtet und diejenigen, die
  671.     weiter weg sind als 37 Einheiten, werden immer schwächer beleuchtet.
  672.     RADIUS bestimmt den Licht aussendenden Kreis, der bei '0' punktförmig
  673.     ist, was wesentlich schneller zu berechnen ist. Außerdem sollte man
  674.     bei größeren Radien den Antialiasing-Faktor ('A'-Kommand) hochsetzen,
  675.     da diese viele Halbschatten erzeugen.
  676.  
  677.  
  678. Nun endlich zur Definition der einzelnen Objekte. Das können bis zu 1000
  679. pro Szene sein ! Alle Objekte verfügen über die selben grundlegenden
  680. Parameter. Genauer gesagt beginnt jede Objekt-Definition mit folgenden
  681. Angaben ('*' steht für das jeweilige Objekt-Kommando (s,q,x,t,r)):
  682.  
  683. * STRUKT FUZZ SPIEGEL INDEX  TRANSP-B G R  UMLICHT-B G R  DIFREFL-B G R
  684.  
  685.     STRUKT ist ein Integerwert, der dem Objekt eine gewünschte (und defi-
  686.         nierte) Oberflächen-Struktur zuordnet. '0' bewirkt eine glatte,
  687.         einheitlich gefärbte Oberfläche. Positive Werte kann man aus
  688.         folgenden Struktur-Funktionen auswählen :
  689.  
  690.        WERT     STRUKTUR-FUNKTION
  691.       ------   -------------------
  692.         1:      Farbverlauf in Y-Richtung
  693.                 Angefangen bei Y=0, verläuft die Farbe von rot über blau
  694.                 zu grün und zurück nach rot bei Y=20. Dies wiederholt sich
  695.                 alle 20 Y-Einheiten.
  696.  
  697.         3:      Gesprenkeltes Wirrwarr
  698.                 Die Helligkeit der Objekt-Oberfläche wird von einem ge-
  699.                 sprenkelten Muster variiert. Diese Struktur benötigt
  700.                 einige definierte Wellenformen.
  701.  
  702.         4:      Wellige Oberfläche
  703.                 Das sieht wie gekräuselte Wellen aus und wenn Reflektion
  704.                 gesetzt ist, werden die Spiegelungen geriffelt.
  705.  
  706.         5:      Backsteinmuster
  707.                 Hier wird das Objekt wie eine Backsteinmauer dargestellt.
  708.                 Die Steingröße ist festgelegt auf Höhe=3.0, Breite=4.0
  709.                 und Länge=8.0; die Mörteldicke beträgt 0.5. Die Farbe der
  710.                 Steine wird durch die 'diffuse Reflektion' des Objekts be-
  711.                 stimmt; die Farbe des Mörtels ist Blau=0.8, Grün=0.85 und
  712.                 Rot=0.99. Die Backsteine liegen entlang der Koordinaten-
  713.                 Achsen.
  714.  
  715.       10...19:  Einzelne Welle
  716.                 Wie Struktur 4, nur daß die Oberfläche von nur einer Welle
  717.                 beeinflußt wird. Nummer 10 ist die erste definierte Welle,
  718.                 Nummer 11 die zweite usw. bis zur zehnten (Nr.19).
  719.  
  720.       20...29:  Murmel
  721.                 20 benutzt die erste Murmeldefinition usw. (1-10).
  722.  
  723.       40...49:  Holz-Maserung
  724.                 Nimmt entsprechend die definierten Holz-Strukturen (1-10).
  725.  
  726.       50...59:  Schachbrett
  727.                 Weist die beschriebenen Schachbrettmuster zu (1-10).
  728.  
  729.       60...69:  Fractal-Struktur
  730.                 Das ist eigentlich keine Oberflächenstruktur an sich (in-
  731.                 sofern, als hier keine Farbänderung stattfindet). Sie kann
  732.                 nur bei Fraktalen Objekten ('x'-Kommando) verwendet werden
  733.                 und ordnet dem Objekt die gewünschte Fraktal-Struktur zu.
  734.  
  735.       70...79:  Weicher Farbverlauf
  736.                 Verwendet einen der definierten Farbverläufe (1-10).
  737.  
  738.       80...89:  Schnee
  739.                 80 ist die erste angegebene Schneefall-Struktur, 81 die
  740.                 zweite usw. wie bei allen anderen auch bis zur zehnten=89.
  741.  
  742.  
  743.     FUZZ (wörtlich 'Fussel') ist eine Pseudo-Struktur-Wert von 0.0 bis
  744.        1.0, der die Oberfläche mit einen Zufalls-'Flaum' überzieht. Das
  745.        kann verwendet werden, um weiche Oberflächen, ähnlich Tennisbäl-
  746.        len, alte, verschleierte Spiegel, geätztes Glas oder Änliches
  747.        darzustellen.
  748.  
  749.     SPIEGEL ist ein Wert von 0.0 bis 1.0, wobei '0.0' keine spektralen
  750.        oder spiegelnden Reflektionen hervorruft, und '1.0' gleich 100%
  751.        spiegelnd bedeutet.
  752.  
  753.     INDEX ist der Index der Lichtbrechung des Objekts. Er wirkt aber nur
  754.        bei durchsichtigen Objekten (um 1.0).
  755.  
  756.     TRANSP-B, -G, -R  bestimmen die Transparenz des Objekts für jede
  757.        Farbe getrennt. Bei '1.0 1.0 1.0' ist es ganz durchsichtig.
  758.  
  759.     UMLICHT-B, -G, -R sind Werte für das Umgebungslicht (Helligkeit im
  760.        Schatten). Bei '1.0 1.0 1.0' bestitzt der Gegenstand sehr STARKES
  761.        Umgebungslicht, was die Farben aber auch stark auswäscht.
  762.  
  763.     DIFREFL-B, -G, -R legt nun endlich die eigentliche Farbe des Objektes
  764.        fest (natürlich in Abhängigkeit von den gewählten Lichtquellen...)
  765.        und nennt sich 'diffuse Reflektion'. Glas hat zum Beispiel über-
  766.        haupt keine diffuse Reflektion während Kalk fast die Werte '1 1 1'
  767.        erhalten müßte.
  768.  
  769. Man beachte, daß auch irrationale Objekte, z.B. mit 100% Spiegelung und
  770. 100% Transparenz, kreiert werden können.
  771.  
  772. Nun zu den einzelnen Objekt-Befehlen. Ihre Parameter FOLGEN (stehen rechts
  773. von) den anderen, zuvor aufgeführten Werten ! Zum Beispiel:
  774. s strukt fuzz spieg ind trans-BGR uml-BGR difr-BGR  ZENTRUM-X Y Z RADIUS
  775. -                                                    --------------------
  776.  
  777.     Kugel:
  778.     ~~~~~~
  779. s ... ZENTRUM-X Y Z  RADIUS
  780.     Erklärt sich selbst.
  781.  
  782.     Parallelogramm:
  783.     ~~~~~~~~~~~~~~~
  784. q ... POSX POSY POSZ  VL-X VL-Y VL-Z  VR-X VR-Y VR-Z
  785.     Mit POS-X Y Z setzt man eine Ecke des Vierecks irgendwo ins Koordina-
  786.     tensystem. Die folgenden beiden Zahlentripel sind zwei Vektoren, die
  787.     zwei Seiten des Parallelogramms relativ zu diesem Eckpunkt bestimmen.
  788.     Und nun das schwierige daran: auf die Anordnung dieser beiden Vektoren
  789.     kommt's an. Um es einfach zu sagen: VL ist von 'oben' gesehen der
  790.     linke und VR der rechte Vektor. Andersherum wird das Objekt unsicht-
  791.     bar (der Autor empfiehlt allerdings, damit zu experimentieren). Die
  792.     Vektoren müssen natürlich nicht rechtwinklig zueinander stehen.
  793.  
  794.     Dreieck
  795.     ~~~~~~~
  796. t ... POSX POSY POSZ  VL-X VL-Y VL-Z  VR-X VR-Y VR-Z
  797.     Das selbe wie beim Parallelogramm.
  798.  
  799.     FRACTAL:
  800.     ~~~~~~~~
  801. x ... POSX POSY POSZ  POS1X POS1Y POS1Z  POS2X POS2Y POS2Z
  802.     Es wird ebenfalls ein Dreieck konstruiert, wobei die drei Eckpunkte
  803.     - im Gegensatz zum einfachen Dreieck - jedoch absolut anzugeben sind.
  804.  
  805.     RING:
  806.     ~~~~~
  807. r ... ZENTRUM-X Y Z  VL-X VL-Y VL-Z  VR-X VR-Y VR-Z  MINRAD MAXRAD
  808.     Ringe sind eine Art Parallelogramm. Die beiden Vektoren müssen hier
  809.     aber rechtwinklig zueinander stehen und bestimmen lediglich die
  810.     Fläche, in der der Ring mit dem Mittelpunkt ZENTRUM, dem Innenradius
  811.     MINRAD und dem Außenradius MAXRAD liegt. Bei MINRAD=0 entsteht eine
  812.     flache Scheibe.
  813.  
  814. Zeilen mit { und } können beliebige Kommandos umschließen und so zusam-
  815. menfassen. Dies erlaubt dem Programm durch die Berechnung erweiterter
  816. Bereiche um die beschriebenen einfachen Objekte herum und Prüfung der
  817. Strahlen-Schnittpunkte optimiertes Ray-Tracing zu betreiben, was schneller
  818. ist, als die einzelne Berechnung der eingeschlossenen Objekte. Solche
  819. Erweiterungen können auch geschachtelt werden.
  820.  
  821.  
  822. QUELLCODE-INFOS:
  823. ~~~~~~~~~~~~~~~~
  824. Jedes Programm hat sein eigenes Quellcode-Directory:
  825.  
  826.       ray_source/
  827.              makefile
  828.              ray.h    - alle globalen Definitionen
  829.              ray.c    - Haupt-Modul des Ray-Tracers
  830.              val.c    - momentane Farbintensität eines Objekts
  831.              hit.c    - berechnet, ob ein Strahl auf ein Objekt trifft
  832.              tex.c    - berechnet die Struktur eines Objekts
  833.              ext.c    - behandelt die {,}-Erweiterungen
  834.              rnd.c    - Zufallszahlen-Tabelle
  835.              mth.c    - führt Vektor- und Matrix-Berechnungen aus
  836.              fil.c    - Disk-I/O Routienen
  837.              int.c    - findet Strahlen/Objekt-Schnittpunkte
  838.              cal.c    - oberste Objekte-Berechnungen
  839.       ray2_source/
  840.              makefile
  841.              ray2.c   - Quellcode des Post-Prozessors
  842.       display_source/
  843.              makefile
  844.              display.c - Quellcode des DISPLAY-Programms
  845.  
  846.  
  847. Nun versucht mal euer Glück ! Ich wünsche euch jedenfalls
  848.  
  849.        viel Vernjüjen      und      much fun !!!
  850.  
  851.                   bis denn... ,   BRÖSEL
  852.  
  853.